"""
日志工具模块
提供统一的日志记录功能，支持文件输出和控制台输出
"""

import os
import sys
from pathlib import Path
from loguru import logger
from src.config import config


class Logger:
    """
    日志管理类
    
    用途：
    - 提供统一的日志记录接口
    - 支持不同级别的日志输出
    - 自动管理日志文件轮转和清理
    
    使用场景：
    - 系统运行时记录各种事件
    - 调试和错误排查
    - 性能监控和统计
    """
    
    def __init__(self):
        """
        初始化日志管理器
        """
        self._setup_logger()
    
    def _setup_logger(self):
        """
        设置日志配置
        """
        # 移除默认的控制台输出
        logger.remove()
        
        # 获取日志配置
        log_level = config.get('logging.level')
        log_format = config.get('logging.format')
        log_rotation = config.get('logging.rotation')
        log_retention = config.get('logging.retention')
        
        # 创建日志目录
        log_dir = Path(config.get('paths.logs_dir'))
        log_dir.mkdir(parents=True, exist_ok=True)
        
        # 添加控制台输出
        logger.add(
            sys.stdout,
            format=log_format,
            level=log_level,
            colorize=True
        )
        
        # 添加文件输出
        logger.add(
            log_dir / "app.log",
            format=log_format,
            level=log_level,
            rotation=log_rotation,
            retention=log_retention,
            encoding='utf-8'
        )
        
        # 添加错误日志文件
        logger.add(
            log_dir / "error.log",
            format=log_format,
            level="ERROR",
            rotation=log_rotation,
            retention=log_retention,
            encoding='utf-8'
        )
    
    def debug(self, message: str, **kwargs):
        """
        记录调试信息
        
        参数：
            message (str): 日志消息
            **kwargs: 额外的上下文信息
        """
        logger.debug(message, **kwargs)
    
    def info(self, message: str, **kwargs):
        """
        记录一般信息
        
        参数：
            message (str): 日志消息
            **kwargs: 额外的上下文信息
        """
        logger.info(message, **kwargs)
    
    def warning(self, message: str, **kwargs):
        """
        记录警告信息
        
        参数：
            message (str): 日志消息
            **kwargs: 额外的上下文信息
        """
        logger.warning(message, **kwargs)
    
    def error(self, message: str, **kwargs):
        """
        记录错误信息
        
        参数：
            message (str): 日志消息
            **kwargs: 额外的上下文信息
        """
        logger.error(message, **kwargs)
    
    def critical(self, message: str, **kwargs):
        """
        记录严重错误信息
        
        参数：
            message (str): 日志消息
            **kwargs: 额外的上下文信息
        """
        logger.critical(message, **kwargs)
    
    def exception(self, message: str, **kwargs):
        """
        记录异常信息（包含堆栈跟踪）
        
        参数：
            message (str): 日志消息
            **kwargs: 额外的上下文信息
        """
        logger.exception(message, **kwargs)


# 全局日志实例
app_logger = Logger() 